/**
 * 认证状态管理
 * 管理用户登录状态、令牌存储和用户信息
 */
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
import { ElMessage } from 'element-plus'
import { userApi } from '@/api'

export const useAuthStore = defineStore('auth', () => {
  // 状态定义
  const token = ref(localStorage.getItem('token') || '')
  const userInfo = ref(JSON.parse(localStorage.getItem('userInfo') || 'null'))
  const isLoading = ref(false)

  // 计算属性
  const isAuthenticated = computed(() => {
    return !!token.value && token.value !== ''
  })

  /**
   * 设置令牌
   * @param {string} newToken - JWT令牌
   */
  const setToken = (newToken) => {
    token.value = newToken
    if (newToken) {
      localStorage.setItem('token', newToken)
    } else {
      localStorage.removeItem('token')
    }
  }

  /**
   * 设置用户信息
   * @param {object} info - 用户信息对象
   */
  const setUserInfo = (info) => {
    userInfo.value = info
    if (info) {
      localStorage.setItem('userInfo', JSON.stringify(info))
    } else {
      localStorage.removeItem('userInfo')
    }
  }

  /**
   * 用户登录
   * @param {object} loginData - 登录数据 {username, password}
   * @returns {Promise} - 返回Promise对象
   */
  const login = async (loginData) => {
    try {
      isLoading.value = true
      
      // 直接调用登录接口，验证逻辑交给响应拦截器处理
      const response = await userApi.login(loginData)
      
      // 保存令牌和用户信息
      if (response && response.data && response.data.token) {
        setToken(response.data.token)
        
        const userInfo = {
          id: response.data.id,
          username: response.data.username
        }
        setUserInfo(userInfo)
        
        ElMessage.success('登录成功')
      }
      
      return response
    } catch (error) {
      console.error('登录失败:', error)
      throw error
    } finally {
      isLoading.value = false
    }
  }

  /**
   * 用户登出
   * @returns {Promise} - 返回Promise对象
   */
  const logout = async () => {
    try {
      // 调用后端登出接口
      await userApi.logout()
      
      // 清除本地状态
      clearAuth()
      
      ElMessage.success('退出登录成功')
    } catch (error) {
      console.error('退出登录失败:', error)
      // 即使后端接口失败，也要清除本地状态
      clearAuth()
      ElMessage.warning('退出登录完成')
    }
  }

  /**
   * 清除认证信息
   */
  const clearAuth = () => {
    setToken('')
    setUserInfo(null)
  }

  return {
    // 状态
    token,
    userInfo,
    isLoading,
    
    // 计算属性
    isAuthenticated,
    
    // 方法
    setToken,
    setUserInfo,
    login,
    logout,
    clearAuth
  }
})